// 获取到的账单原始数据
var billsDataList;

// 账单计数器
var billsCount = 0;

// 删除账单
function deleteBill(index) {
    if (confirm("确认删除该账单？")) {
        deleteChecked([index]);
    }
}

// 删除多选
function deleteChecked(indexList) {
    if (indexList == undefined) {
        if (confirm("确认删除所选账单？")) {
            // 获取选中的账单索引
            var indexList = [];
            $('.checkItem:checked').each(function () {
                indexList.push(parseInt($(this).parent().next().text()));
            });
            console.log(indexList);
        }
    }

    for (let index of indexList) {
        // 获取对应账单id
        let bid = billsDataList[index - 1].bid;
        // 发送 AJAX 请求删除账单
        deleteRequest(bid);
        // 删除前端账单数据
        billsDataList.splice(index - 1, 1);
    }
    // 退出编辑状态
    toNoEditing();
    // 重新加载表格
    loadTableData();
}

// 删除请求在·
function deleteRequest(bid) {
    // 发送 AJAX 请求删除账单
    var ajaxData = {
        action: "delete",
        data: {
            username: Cookies.get('username'),
            pic: Cookies.get('pic'),
            bid: bid
        }
    }
    $.ajax({
        url: '/api/data',
        type: 'POST',
        data: JSON.stringify(ajaxData),
        contentType: 'application/json;charset=UTF-8',
        dataType: 'json',
        success: function (response) {
            // AJAX 请求成功后的处理
            if (response.errno === 0) {
                console.log("Delete bill success.");
            } else {
                console.log(response.message);
            }
        },
        error: function (xhr, status, error) {
            // AJAX 请求失败后的处理
            console.error('Delete bill failed: ' + error);
        }
    });
}

// 排序账单
function sortOfDate(list, left, right) {
    if (left >= right) {
        return;
    }
    var i = left;
    var j = right;
    var pivot = list[left]; // 存储整个对象
    while (i < j) {
        while (new Date(list[j].date) < new Date(pivot.date) && i < j) { // 使用new Date()确保比较的是日期对象
            j--;
        }
        while (new Date(list[i].date) >= new Date(pivot.date) && i < j) { // 使用new Date()确保比较的是日期对象
            i++;
        }
        if (i < j) {
            // 交换整个对象
            var temp = list[i];
            list[i] = list[j];
            list[j] = temp;
        }
    }
    // 将pivot放到正确的位置
    list[left] = list[i];
    list[i] = pivot;

    sortOfDate(list, left, i - 1);
    sortOfDate(list, i + 1, right);
}

// 将数据载入表格
function loadTableData() {
    // 清空表格内容
    $("#billTable > tbody").empty();
    // 归零计数器
    billsCount = 0;
    // 定位到账单表格
    var $billTable = $("#billTable > tbody")
    // 排序账单数据
    sortOfDate(billsDataList, 0, billsDataList.length - 1);

    for (let item of billsDataList) {
        // 计数器加一
        billsCount++;
        // 给每条数据添加索引
        item.index = billsCount;
        // console.log(item);
        $billTable.append(
            $(`<tr class="table-${item.type == "支出" ? "danger" : "success"}">
            <th scope="col" class="edit-col d-none">
                <input title="选择" class="form-check-input checkItem" type="checkbox" name="checkItem">
            </th>
            <th scope="row">${billsCount}</th>
            <td>${item.type}</td>
            <td>${item.date}</td>
            <td>${item.statement}</td>
            <td>${item.notes}</td>
            <td>${item.amount}</td>
            <td class="edit-col text-end d-none">
                <button type="button" class="btn btn-danger btn-sm" onclick="deleteBill(${billsCount})">删除</button>
            </td>
            </tr>`)
        )
    }
    // 为复选框绑定事件
    $('.checkItem').click(function () {
        checkItemChange($(this).prop('checked'));
    });

}

// 加载账单数据
function loadBillData() {
    // 清空表格内容
    $("#billTable > tbody").empty();
    // 归零计数器
    billsCount = 0;

    var username = Cookies.get('username');
    // console.log(username);
    if (username == undefined) {
        // 如果用户未登录，提示并跳转到登录页面
        alert("请先登录！");
        window.location.href = "pages/login.html";
    } else {
        // 如果用户已登录，更新页面显示
        // 隐藏登录/注册按钮
        $("#login-unlogin").addClass("d-none");
        // 显示用户信息
        $("#login-logined").removeClass("d-none");
        // 设置用户名
        $("#navbarDropdownMenuLinkRight").text(username);
        // 显示添加按钮
        $("#addBill").removeClass("d-none");
        // 显示数据加载动画
        $("#data-loading").removeClass("d-none");
        var ajaxData = {
            action: "get",
            data: {
                username: username,
                pic: Cookies.get('pic'),
                count: 0
            }
        };
        $.ajax({
            url: '/api/data',
            type: 'POST',
            data: JSON.stringify(ajaxData),
            contentType: 'application/json;charset=UTF-8',
            dataType: 'json',
            success: function (response) {
                // AJAX 请求成功后的处理
                // console.log(response);
                if (response.errno === 0) {
                    // 保存账单原始数据
                    billsDataList = response.data;
                    // 隐藏数据加载动画
                    $("#data-loading").addClass("d-none");
                    // 账单数据载入表格
                    loadTableData();
                } else {
                    console.log(response.message);
                }
            },
            error: function (xhr, status, error) {
                // AJAX 请求失败后的处理
                console.error('Login failed: ' + error);
            }
        });
    }
}

// 显示添加账单页面
function billBox_show() {
    $("#addBillFormBox").addClass("show");
    $("#addBill").removeClass("btn-outline-dark");
    $("#addBill").addClass("btn-dark");
}

// 隐藏添加账单页面
function billBox_hide() {
    $("#addBillFormBox").removeClass("show");
    $("#addBill").addClass("btn-outline-dark");
    $("#addBill").removeClass("btn-dark");
}

// 切换添加页面显示状态
function changeAddBillFormBoxStatus() {
    if ($("#addBillFormBox").hasClass("show")) {
        billBox_hide();
    } else {
        billBox_show();
    }
}

// 是否第一次提交表单， 用于控制强调显示未填信息
var isFristSubmitAppend = true;

// 对某个对象进行判空
function isEmpty(event, defaultValue) {
    if (isFristSubmitAppend) {
        return;
    }
    if (event.val() == defaultValue) {
        event.addClass("is-invalid");
        return true;
    } else {
        event.removeClass("is-invalid");
        return false;
    }
}

// 编辑状态
var isEditing = false;

// 转到编辑状态
function toEditing() {
    // 切换编辑状态
    isEditing = true;
    $('#edit-btn').text('完成')
        .removeClass('btn-secondary')
        .addClass('btn-dark');
    $('.edit-col').removeClass('d-none');

}

// 退出编辑状态
function toNoEditing() {
    // 切换编辑状态
    isEditing = false;
    $('#edit-btn').text('编辑')
        .removeClass('btn-dark')
        .addClass('btn-secondary');
    $('.edit-col').addClass('d-none');
}

// 切换编辑状态
function toggleEditing() {
    if (isEditing) {
        toNoEditing();
    } else {
        toEditing();
    }
}

// 选中的数量
var checkedCount = 0;

// 全选/取消全选
function checkAll() {
    $chekAll = $('#checkAll');
    $chekItems = $('.checkItem');
    if ($chekAll.prop('checked')) {
        $chekItems.prop('checked', true);
        checkedCount = $chekItems.length;
    } else {
        $chekItems.prop('checked', false);
        checkedCount = 0;
    }
}

// 单挑选中/取消选中改变事件
function checkItemChange(isChecked) {
    if (isChecked) {
        checkedCount++;
    } else {
        checkedCount--;
    }
    // 判断是否全选
    if (checkedCount == billsCount) {
        $('#checkAll').prop('checked', true);
    } else {
        $('#checkAll').prop('checked', false);
    }
}


// 登出
function logout() {
    clearCookies();
    // 刷新页面
    window.location.reload();
}

// 清除cookies
function clearCookies() {
    Cookies.remove('username');
    Cookies.remove('pic');
}

// 获取URL参数
function getQueryParam(param) {
    const urlParams = new URLSearchParams(window.location.search);
    return urlParams.get(param);
}
